package com.suanfa.sort.ti;

/**
 * @author jukg
 * @date 2025/01/06 11:25
 * @description
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
 */
public class CollectRemove {

    public static void main(String[] args) {
        int[] nums = {3,2,2,3};
        int val = 3;
        System.out.println(removeElement3(nums,val));
    }


    public static int removeElement(int[] nums, int val) {
       int n = nums.length;
       int cur = 0;

       for(int i=0; i<n; i++){

           if(nums[i] != val){
               nums[cur] = nums[i];
               cur++;
           }
       }
       return cur;

    }

    public static int removeElement2(int[] nums, int val) {
        int n = nums.length;
        int left = 0;
        for (int right = 0; right < n; right++) {
            if (nums[right] != val) {
                nums[left] = nums[right];
                left++;
            }
        }
        return left;
    }

    public static int removeElement3(int[] nums, int val) {
        int left = 0;
        int right = nums.length;

        while(left < right){

            if(nums[left] == val){
                nums[left] = nums[right-1];
                right --;
            }else{
                left ++;
            }

        }
        return left;
    }
}
